package com.ruoyi.system.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysAssetGx;
import com.ruoyi.system.domain.SysAssetInfo;
import com.ruoyi.system.domain.vo.AssetStatisticsVO;
import com.ruoyi.system.mapper.SysAssetGxMapper;
import com.ruoyi.system.mapper.SysAssetInfoMapper;
import com.ruoyi.system.service.ISysAssetInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 资产信息Service业务层处理
 * 
 * @author 陈玉强
 * @date 2025-06-01
 */
@Service
public class SysAssetInfoServiceImpl implements ISysAssetInfoService 
{
    @Resource
    private SysAssetInfoMapper sysAssetInfoMapper;
    @Autowired
    private SysAssetGxMapper sysAssetGxMapper;
    /**
     * 查询资产信息
     * 
     * @param assetId 资产信息主键
     * @return 资产信息
     */
    @Override
    public SysAssetInfo selectSysAssetInfoByAssetId(Long assetId)
    {
        SysAssetInfo sysAssetInfo = sysAssetInfoMapper.selectSysAssetInfoByAssetId(assetId);
        SysAssetGx sysAssetGx = new SysAssetGx();
        sysAssetGx.setAssetId(sysAssetInfo.getAssetId());
        List<SysAssetGx> sysAssetGxes = sysAssetGxMapper.selectSysAssetGxList(sysAssetGx);
        sysAssetInfo.setSysAssetGx(sysAssetGxes);
        return sysAssetInfo;
    }

    /**
     * 查询资产信息列表
     * 
     * @param sysAssetInfo 资产信息
     * @return 资产信息
     */
    @Override
    public List<SysAssetInfo> selectSysAssetInfoList(SysAssetInfo sysAssetInfo) {

        List<SysAssetInfo> sysAssetInfos = sysAssetInfoMapper.selectSysAssetInfoList(sysAssetInfo);
        //增加sysAssetInfo 转义
        for (SysAssetInfo info : sysAssetInfos) {

            //身份信息 sys_info_type
            info.setInfoTypeName(DictUtils.getDictLabel("sys_info_type", info.getInfoType()));
            //组织架构名称

            info.setOrgIdName(DictUtils.getDictName("dept"+info.getOrgId()));
            //单位类型
            info.setOrgTypeName(DictUtils.getDictLabel("dept_type", info.getOrgType()));
            //系统类型 sys_type
            info.setSystemTypeName(DictUtils.getDictLabel("sys_type", info.getSystemType()));
            //是否定级 sys_is_dj
            info.setIsClassifiedName(DictUtils.getDictLabel("sys_is_dj", info.getIsClassified()));
            //系统级别 sys_level
            info.setSystemLevelName(DictUtils.getDictLabel("sys_level", info.getSystemLevel()));
            //业务安全等级 sys_sc_level
            info.setBusinessSecurityLevelName(DictUtils.getDictLabel("sys_sc_level", info.getBusinessSecurityLevel()));

            //系统服务安全等级 sys_fw_level
            info.setServiceSecurityLevelName(DictUtils.getDictLabel("sys_fw_level", info.getServiceSecurityLevel()));

            //是否备案  sys_is_ba
            info.setIsFiledName(DictUtils.getDictLabel("sys_is_ba", info.getIsFiled()));

            //是否评测  sys_is_pc
            info.setIsEvaluatedName(DictUtils.getDictLabel("sys_is_pc", info.getIsEvaluated()));

            //访问途径  sys_acc_type
            info.setAccessMethodName(DictUtils.getDictLabel("sys_acc_type", info.getAccessMethod()));

            //操作系统
            //sys_xt
            info.setOsTypeName(DictUtils.getDictLabel("sys_xt", info.getOsType()));

            //中间件
            //sys_zjj
            info.setMiddlewareTypeName(DictUtils.getDictLabel("sys_zjj", info.getMiddlewareType()));

            //数据库
            //sys_db
            info.setDatabaseTypeName(DictUtils.getDictLabel("sys_db", info.getDatabaseType()));

            //应用软件产品
            //sys_app
            info.setAppProductName(DictUtils.getDictLabel("sys_app", info.getAppProduct()));

            //商用密码                    sys_is_pwd
            info.setIsSecurityEvaluatedName(DictUtils.getDictLabel("sys_is_pwd", info.getIsSecurityEvaluated()));

            //云计算服务
            //sys_is_yun
            info.setIsCloudEvaluatedName(DictUtils.getDictLabel("sys_is_pwd", info.getIsCloudEvaluated()));

            //云计算服务
            //sys_status
            info.setStatusName(DictUtils.getDictLabel("sys_status", info.getStatus()));
    }
        return sysAssetInfos;
    }

    /**
     * 新增资产信息
     * 
     * @param sysAssetInfo 资产信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertSysAssetInfo(SysAssetInfo sysAssetInfo)
    {
        int i = sysAssetInfoMapper.insertSysAssetInfo(sysAssetInfo);
        sysAssetInfo.setCreateTime(DateUtils.getNowDate());
        List<SysAssetGx> sysAssetGx = sysAssetInfo.getSysAssetGx();
        if(null!=sysAssetGx&& StringUtils.isNotEmpty(sysAssetGx.get(0).getAccessDomain())){
            for (SysAssetGx gx : sysAssetGx) {
                gx.setAssetId(sysAssetInfo.getAssetId());
                sysAssetGxMapper.insertSysAssetGx(gx);
            }
        }



        return i;
    }

    /**
     * 修改资产信息
     * 
     * @param sysAssetInfo 资产信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateSysAssetInfo(SysAssetInfo sysAssetInfo)
    {
        sysAssetInfo.setUpdateTime(DateUtils.getNowDate());
        int i1 = sysAssetGxMapper.deleteSysAssetGxByGxId(sysAssetInfo.getAssetId());
        List<SysAssetGx> sysAssetGx = sysAssetInfo.getSysAssetGx();
        if(null!=sysAssetGx&& StringUtils.isNotEmpty(sysAssetGx.get(0).getAccessDomain())){
            for (SysAssetGx gx : sysAssetGx) {
                gx.setAssetId(sysAssetInfo.getAssetId());
                sysAssetGxMapper.insertSysAssetGx(gx);
            }
        }
        return sysAssetInfoMapper.updateSysAssetInfo(sysAssetInfo);
    }

    /**
     * 批量删除资产信息
     * 
     * @param assetIds 需要删除的资产信息主键
     * @return 结果
     */
    @Override
    public int deleteSysAssetInfoByAssetIds(Long[] assetIds)
    {
        return sysAssetInfoMapper.deleteSysAssetInfoByAssetIds(assetIds);
    }

    /**
     * 删除资产信息信息
     * 
     * @param assetId 资产信息主键
     * @return 结果
     */
    @Override
    public int deleteSysAssetInfoByAssetId(Long assetId)
    {
        return sysAssetInfoMapper.deleteSysAssetInfoByAssetId(assetId);
    }

    /**
     * 获取资产统计数据
     * 
     * @return 资产统计数据
     */
    @Override
    public AssetStatisticsVO getAssetStatistics()
    {
        AssetStatisticsVO statistics = new AssetStatisticsVO();
        
        // 系统类型统计（使用字典转换的SQL查询）
        statistics.setSystemTypeStats(convertToStatItems(sysAssetInfoMapper.selectSystemTypeStats()));
        
        // 操作系统统计（使用字典转换的SQL查询）
        statistics.setOsTypeStats(convertToStatItems(sysAssetInfoMapper.selectOsTypeStats()));
        
        // 中间件统计（使用字典转换的SQL查询）
        statistics.setMiddlewareStats(convertToStatItems(sysAssetInfoMapper.selectMiddlewareStats()));
        
        // 系统级别统计（使用字典转换的SQL查询）
        statistics.setSystemLevelStats(convertToStatItems(sysAssetInfoMapper.selectSystemLevelStats()));
        
        return statistics;
    }

    private List<AssetStatisticsVO.StatItem> convertToStatItems(List<Map<String, Object>> stats) {
        return stats.stream()
            .map(map -> {
                String name = (String) map.get("name");
                Number value = (Number) map.get("value");
                return new AssetStatisticsVO.StatItem(name, value.longValue());
            })
            .collect(Collectors.toList());
    }
}
